package com.idroc.storage;

/**
 * IO分页
 * @author yuyoo (yuyoo4j@163.com)
 * @date 2010-3-26 下午08:14:23
 */
public interface IoPage {
	
	/**
	 * 获取IO分页ID
	 * @return -- IO分页ID
	 */
	long getPageId();
	
	/**
	 * 获取IO分页类型
	 * @return -- IO分页类型
	 */
	short getPageType();
	
	/**
	 * 获取IO块文件ID
	 * @return -- IO块文件ID
	 */
	short getFileId();
	
	/**
	 * 获取IO分页中IO块在IO块文件中的索引编号
	 * @return -- IO块在文件中的编号
	 */
	long getIoBlockIndex();
	
	/**
	 * 获取下一个IO分页ID
	 * @return -- IO分页ID
	 */
	long getNext();
	
	/**
	 * 设置下一个IO分页ID
	 * @param pageId -- IO分页ID
	 */
	void setNext(long pageId);
		
	/**
	 * 根据在IO分页中的偏移获取对应的IO块
	 * @return -- IO块
	 */
	IoBlock getIoBlock();
	
	/**
	 * IO分页大小
	 * @return -- 分页大小
	 */
	int size();
	
	/**
	 * IO分页头大小
	 * @return -- IO分页头大小
	 */
	int headerSize();
	
	/**
	 * IO分页内容体大小
	 * @return -- IO分页内容体大小
	 */
	int bodySize();
		
	/**
	 * 读取IO分页内容体内的一个字节
	 * @param pos -- IO分页内容体的偏移
	 * @return -- 字节数据
	 */
	byte readBody(int pos);
	
	/**
	 * 读取IO分页内容体内的一个字节数组
	 * @param pos -- IO分页内容体的偏移
	 * @param length -- 读取长度
	 * @return -- 字节数组数据
	 */
	byte[] readBodyBytes(int pos, int length);
	
	/**
	 * 读取IO分页内容体内的一个short
	 * @param pos -- IO分页内容体的偏移
	 * @return -- short数据
	 */
	short readBodyShort(int pos);
	
	/**
	 * 读取IO分页内容体内的一个int
	 * @param pos -- IO分页内容体的偏移
	 * @return -- int 数据
	 */
	int readBodyInt(int pos);
	
	/**
	 * 读取IO分页内容体内的一个long
	 * @param pos -- IO分页内容体的偏移
	 * @return -- long数据
	 */
	long readBodyLong(int pos);
	
	/**
	 * 写入一个字节到IO分页内容体
	 * @param pos -- IO分页内容体的偏移
	 * @param value -- 数据
	 */
	void writeBody(int pos, byte value);
	
	/**
	 * 写入一个数组到IO分页内容体
	 * @param pos -- IO分页内容体的偏移
	 * @param values -- 数据
	 */
	void writeBodyBytes(int pos, byte[] values);
	
	/**
	 * 写入一个short到IO分页内容体
	 * @param pos -- IO分页内容体的偏移
	 * @param value -- 数据
	 */
	void writeBodyShort(int pos, short value);
	
	/**
	 * 写入一个int到IO分页内容体
	 * @param pos -- IO分页内容体的偏移
	 * @param value -- 数据
	 */
	void writeBodyInt(int pos, int value);
	
	/**
	 * 写入一个long到IO分页内容体
	 * @param pos -- IO分页内容体的偏移
	 * @param value -- 数据
	 */
	void writeBodyLong(int pos, long value);
}
